'use strict';

const Controller = require('egg').Controller;
//post请求参数 ctx.request.body
//get请求参数 ctx.request.query
class HomeController extends Controller {
  async register() {
    let rst = {
      status: 200,
      success: true,
      message: ''
    }
    const {ctx} = this;
    ctx.logger.info('注册参数:',ctx.request.body)
    try{
      let user = await ctx.model.User.create({
        account: ctx.request.body.account,
        pwd: ctx.request.body.pwd,
        sign_up_time: new Date(),                 //创建时间
      })
      rst.status = 10004;
      rst.creds = user.account,
      rst.message = '注册成功!';
    }catch(err){
      if(err.errors&&err.errors[0].type === 'unique violation'){
        rst = {
          status: 20002,
          success: false,
          message: '该账号已存在！',
          err: err.errors[0].message
        }
      }
      ctx.logger.error('home.register error: ',JSON.stringify(err.errors));
    }
    ctx.body = rst;
  }
  async login() {
    let rst = {
      status: 200,
      success: true,
      message: ''
    }
    const {ctx} = this;
    ctx.logger.info('登录参数:',ctx.request.body)
    try{
      let user = await ctx.model.User.findByLogin(ctx.request.body)
      try {
        await user.signIn();
        rst.status = 10001;
        rst.creds = user.account;
        rst.lastRoleId = user.roleid;
        rst.roles = await user.getRoles();
        rst.message = '登录成功!';
      } catch (error) {
        rst = {
          status: 20001,
          success: false,
          message: '密码错误！',
        }
      }
    }catch(err){
      ctx.logger.error('home.login error:',err)
    }
    ctx.body = rst;
  }
  //修改用户密码（前台&后台两种）
  async modifyPwd() {
      let rst = {
        status: 200,
        success: true,
        message: ''
      }
      const {ctx} = this;
      ctx.logger.info('请求参数:',ctx.request.body)

      try{
        // 后台修改密码
        if(ctx.request.url=="/users/modifyPwd"&& ctx.request.body.specialKey != "apeng"){
          throw new Error(0)
        }
        await ctx.model.User.update({
          pwd: ctx.request.body.newPwd
        },{
          where: {
            account: ctx.request.body.account,
            id: ctx.request.body.id,
          }
        })
        rst.message = '修改密码成功!!!'
        rst.status = 10006;
      }catch(err){
        rst = {
          status: JSON.stringify(err)=="{}"?20004:20006,
          success: false,
          message: JSON.stringify(err)=="{}"?"管理员密钥错误":'修改密码失败!!!',
        }
        ctx.logger.error('user.modifyPwd error: ', JSON.stringify(err));
   
      }
      ctx.body = rst;
  }
  //修改用户使用权限
  async modifyUseSs() {
    let rst = {
      status: 200,
      success: true,
      message: ''
    }
    const {ctx} = this;
    ctx.logger.info('请求参数:',ctx.request.body)

    try{
      // 后台修改密码
      if(ctx.request.body.specialKey != "apeng"){
        throw new Error(0)
      }
      await ctx.model.User.update({
        use_status: ctx.request.body.use_status
      },{
        where: {
          account: ctx.request.body.account,
          id: ctx.request.body.id,
        }
      })
      rst.message = '修改账号状态成功!!!'
      rst.status = 10008;
    }catch(err){
      rst = {
        status: 20004,
        success: false,
        message: JSON.stringify(err)=="{}"?"管理员密钥错误":'修改账号状态失败!!!',
      }
      ctx.logger.error('user.modifyPwd error: ', JSON.stringify(err));
 
    }
    ctx.body = rst;
}
  //后台注销用户或用户主动注销,永久删除！
  async removeUser() {
    let rst = {
      status: 200,
      success: true,
      message: ''
    }
    const {ctx} = this;
    ctx.logger.info('注册参数:',ctx.request.body)
    try{
      // 后台修改密码
      if(ctx.request.url=="/users/removeUser"&& ctx.request.body.specialKey != "apeng"){
        throw new Error(0)
      }
      //这里需要用到事务，带学习
      let user = await ctx.model.User.findOne({
        where: {
          id: ctx.request.body.id
        }
      })
      let userRoles = await user.getRoles();
      for(let i =0; i< userRoles.length;i++){
        await userRoles[i].destroy();
      }
      await user.destroy();
      rst.status = 10007;
      rst.message = '注销账号成功!';
    }catch(err){
      rst = {
        status:JSON.stringify(err)=="{}"? 20004:20005,
        success: false,
        message: JSON.stringify(err)=="{}"?"管理员密钥错误":'注销账号失败!',
      }
      ctx.logger.error('user.modifyPwd error: ', JSON.stringify(err));
    }
    ctx.body = rst;
  }
}

module.exports = HomeController;
